
/**
\file Definition of nmn::math free functions.
\author Sean Tromans
*/

#ifndef	NMN_TEMPLATES_MATH_FUNCTIONS_HPP
#define	NMN_TEMPLATES_MATH_FUNCTIONS_HPP

namespace nmn
{

	namespace math
	{

		//
		//	Vector
		//
		
		/**
		Calculates the scalar product between two vectors.
		@param lhs The first vector to use.
		@param rhs The second vector to use.
		@return The scalar product of lhs and rhs.
		\author Sean Tromans
		\relates nmn::math::vector
		*/
		template< typename TValueType, size_t Size >
		typename vector< TValueType, Size >::value_type dot( vector< TValueType, Size > const & lhs, vector< TValueType, Size > const & rhs );

		//
		//	Matrix
		//

		/**
		Transposes a square_matrix.
		@param matrix The square_matrix to transpose.
		@return A transposed version of the provided matrix.
		\author Sean Tromans
		\relates nmn::math::square_matrix
		*/
		template< typename TValueType, size_t Size >
		square_matrix< TValueType, Size > transpose( square_matrix< TValueType, Size > matrix );

	};

};

#endif	//NMN_TEMPLATES_MATH_FUNCTIONS_HPP
